In modern large-scale computer systems containing multiple requestors and multiple hierarchical levels of system memory, the multiple requestors can make concurrent memory accesses to address ranges that are separate or overlapped. These accesses can include multiple concurrent accesses to the same architectural structure, such as a cache line or a page frame. Consequently, a system with multiple hierarchical levels of system memory presents many challenges for maintaining and verifying data integrity.
When multiple requesters initiate simultaneous or nearly simultaneous memory requests to a specific address range, it is difficult to determine the order in which the requests will arrive at the memory. Requestor #1 may obtain access before requestor #2 or vice versa. If Requesters #1 and #2 are both modifying the same address, it is difficult to determine the order of the modifications. Thus, the data at any instant in time might originate from any requestor. A system could have more than 32 requestors. With this number of requesters, it is extremely difficult to identify what data should exist in memory at any instant in time.
For a system containing intermediate levels of memory such as cache units, data can be resident in one or more of the cache units. A cache unit might have to write modified data to main memory and invalidate the data in the cache unit before allowing another requestor to access the data. Modified data in a cache unit must be identified so any subsequent requestors will request a current copy of the modified data. A cache unit might also write modified data to main memory to make room for storing some other data. Thus, it is extremely difficult to identify the proper location for data within the memory hierarchy at any instant in time.
In addition to being extremely difficult to identify what data should exist where in the memory hierarchy at any instant in time, it is extremely difficult to determine when to verify the data in a dynamic system environment. If data is verified after all requestor accesses have been completed, only the final data can be verified. It is possible that one or more forms of data corruption could have existed during the accesses, but a later access overwrites the corrupted data. Thus, data verification during the accesses is required, but such intermediate data verification is difficult to accomplish.
If data corruption is detected by a particular sequence of access requests, the sequence of access request often needs to be reproduced to isolate the cause of the data corruption. It is extremely difficult isolate a system defect causing data corruption because it is virtually impossible to reproduce the particular sequence of access requests that detects the data corruption.
A method and system that address these and other related issues are therefore desirable.